1 /* 2 * The MIT License (MIT) 3 * 4 * Copyright (c) 2014 Devisualization (Richard Andrew Cattermole) 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in all 14 * copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 */ 24 module devisualization.util.opengl.framebuffer; 25 import devisualization.util.opengl.function_wrappers; 26 import devisualization.util.opengl.texture; 27 import devisualization.util.opengl.renderbuffer; 28 import glINCOMPLETE = derelict.opengl3.gl3; 29 deprecated("de_util:opengl is going to die"): 30 31 class FrameBuffer { 32 private { 33 uint id_; 34 } 35 36 this() { 37 glINCOMPLETE.glGenFramebuffers(1, &id_); 38 } 39 40 ~this() { 41 glINCOMPLETE.glDeleteFramebuffers(1, &id_); 42 } 43 44 void bind() { 45 glINCOMPLETE.glBindFramebuffer(glINCOMPLETE.GL_FRAMEBUFFER, id_); 46 } 47 48 void attach(TextureImage texture, ubyte colorI = 0) { 49 glINCOMPLETE.glFramebufferTexture2D(glINCOMPLETE.GL_FRAMEBUFFER, glINCOMPLETE.GL_COLOR_ATTACHMENT0 + colorI, glINCOMPLETE.GL_TEXTURE_2D, texture.id, 0); 50 } 51 52 void attach(RenderBuffer buffer) { 53 glINCOMPLETE.glFramebufferRenderbuffer(glINCOMPLETE.GL_FRAMEBUFFER, glINCOMPLETE.GL_DEPTH_STENCIL_ATTACHMENT, glINCOMPLETE.GL_RENDERBUFFER, buffer.id); 54 } 55 56 bool isComplete() { 57 return glINCOMPLETE.glCheckFramebufferStatus(glINCOMPLETE.GL_FRAMEBUFFER) != glINCOMPLETE.GL_FRAMEBUFFER_COMPLETE; 58 } 59 60 @property uint id() { 61 return id_; 62 } 63 64 static { 65 void unbind() { 66 glINCOMPLETE.glBindFramebuffer(glINCOMPLETE.GL_FRAMEBUFFER, 0); 67 } 68 } 69 }